package com.web.springcloud.cfgbeans;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * 等于application.xml配置
 */
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced //SCRibbon负载均衡工具，默认轮询
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule myRule() {
        //return new RoundRobinRule();
        //用我们重新选择的随机算法，替代默认的轮询
        return new RandomRule();//随机
        /**
         * IRule策略:
         * RoundRobinRule 轮询
         * RandomRule 随机
         * AvailabilityFilteringRule 先过滤掉由于多次访问故障而处于断路的服务，还有并发连接数超过阀值的服务，对剩余的进行轮询
         * WeightedResponseTimeRule 根据平均响应时间计算服务权重，时间越快权重越高
         * RetyRule 先按RoundRobinRule策略，如果服务失败则在指定时间内重试，获取可用服务
         * BestAvailableRuele 先过滤掉失败的，在选择并发小的服务
         * ZoneAvoidanceRule 复合判断server所在区域的性能和可用性选择服务
         */
    }
}
 /*
@Bean
public UserService getUserService(){
    return new UserServiceImpl();
}
*/
